\documentclass[a4paper]{article} 

\usepackage{cite}
\usepackage{fancyhdr}
\usepackage{lipsum}
\usepackage{extarrows}
\usepackage{ctex}
\usepackage{amsfonts,amssymb} 
\usepackage{amsmath} 
\usepackage{cases}
\usepackage{geometry}
\usepackage{graphicx}
\usepackage{listings}
\usepackage{xcolor}
\usepackage{framed}
\usepackage{float}
\usepackage{ulem}
\usepackage{booktabs}
\usepackage{amsthm}
\usepackage{tikz}
\geometry{a4paper,left=3cm,right=3cm,top=3cm,bottom=3cm}

\begin{document}
	\begin{center}
		{\heiti {\huge 第一次编程作业报告}}
	\end{center}
	
	\begin{center}
		{\large 求数2101\ 叶陈昊\ 3210106359}
	\end{center}

	\section{ProblemA}
	本题要求设计一个带有纯虚函数\texttt{solve}的基类\texttt{EquationSolver}，并建立三个派生类\texttt{Bisection}、\texttt{Newton}以及\texttt{Secant}各自实现其对应功能.
	
	最后给出的代码如\texttt{ProblemA.h}所示.其中为方便需要，定义了\texttt{ErrorJudgment}函数用于判断所找的点是否近似于零点；为了后面的编程题，定义了\texttt{CheckPrint}函数，用于检查用户所给函数在所求零点附近区域上是否连续并输出相应结果，具体见后面的运行结果.
	
	\section{ProblemB}
	本题要求运用A题的二分法寻找4个函数的近似零点.所得到的结果如图\ref{B}所示.
	\begin{figure}[H]
		\centering
		\includegraphics[width=0.8\textwidth]{pictures/AnswerB.png}
		\caption{AnswerB}
		\label{B}
	\end{figure}
	那么注意到前三个函数在各自所给区间上连续，且在两端点处异号，所以可以预见通过二分法可以找到这三个函数的零点；但第四个函数因为有分母的关系，可能在区间的某点上分母值为0，从而导致此函数在所给区间上不连续，从而二分法可能失效.
	
	结果显示函数$f(x)=(x^3+4x^2+3x+5)/(2x^3-9x^2+18x-2)$在$[0,4]$上有“零点”0.117877.但分子值在$[0,4]$上恒大于0告诉我们这不可能是$f(x)$的零点.也就是说，我们找到的这个点其实是分母$2x^3-9x^2+18x-2$的零点，而代码给出结果只不过是因为在0.117877附近$f(x)$趋近于无穷，但在左边是负无穷，右边是正无穷.所以循环中断是在区间长度小于\texttt{eps}的时候，但函数值是很接近无穷的.这个时候我们所定义的函数\texttt{CheckPrint}就帮助我们稍微检查了这一情况并发出了预警，使得我们能够进行进一步的判断.
	
	\section{ProblemC}
	本题要求运用A题的牛顿法用两个不同的初始点分别寻找给定函数的零点.所得到的结果如图\ref{C}所示.
	\begin{figure}[H]
		\centering
		\includegraphics[width=0.8\textwidth]{pictures/AnswerC.png}
		\caption{AnswerC}
		\label{C}
	\end{figure}
	由于此函数在$(\frac{\pi}{2},\frac{3\pi}{2})$和$(\frac{3\pi}{2},\frac{5\pi}{2})$上连续可微，且$\frac{\pi}{2}<4.5<\frac{3\pi}{2}<7.7<\frac{5\pi}{2}$，因此对4.5和7.7分别用牛顿法理论上是可以找到近似零点的.而实际上也果然如此.
	
	\section{ProblemD}
	本题要求运用A题的割线法寻找3个函数的近似零点.所得到的结果如图\ref{D}所示.
	\begin{figure}[H]
		\centering
		\includegraphics[width=0.8\textwidth]{pictures/AnswerD.png}
		\caption{AnswerD}
		\label{D}
	\end{figure}

	首先看第一个函数$f_1(x)=\sin \frac{x}{2}-1$.注意到我们可以直接手算此函数的根(i.e. $(4k+1)\pi,k\in\mathbb{Z}$)，很容易发现以$x_0=0,x_1=\frac{\pi}{2}$为初始值，割线法会收敛到$\pi$；而以$x_0=10,x_1=4\pi$为初始值，割线法会收敛到$5\pi$.另外，由于$f_1(x)$在零点处的斜率为0，所以此方法的收敛速度较慢，如果\texttt{eps}设置得不够小，则输出的结果可能精度不高.在代码中，我手动将$f_1(x)$的\texttt{eps}设置的更小了一些，使解的精度稍微更高了一些.
	
	再看第二个函数$f_2(x)=e^x-\tan x$.由于$\tan x$是周期函数，且每个周期内值域都是$\mathbb{R}$，又$e^x$在$x<0$的值域为$(0,1)$.因此在$x<0$处$f_2(x)$必然有零点.因此我们除了题给的一组正数初始值（收敛到一个正零点）之外，再给一组负数初始值，理论上会收敛到一个负零点.图\ref{D}显示的结果也符合我们的预期.
	
	最后看第三个函数$ f_3(x)=x^3-12x^2+3x+1 $.注意到$f_3(-1)=-15<0,f_3(0)=1>0,f_3(1)=-7<0,$则由$f_3$的连续性及零点存在定理知，它在$(-1,0)$和$(0,1)$上各有一个零点.因此题给初始值会收敛到$(-1,0)$上的零点，而我们新给的正数初始值会收敛到$(0,1)$上的零点.
	
	总之，当割线法选取不同点作为初始值时，如果连续函数有不止一个零点，则通过迭代得到的结果也可能不止一种.
	
	\section{ProblemE}
	本题要求用A题中的三种方法，计算函数
	$$f(h):=V-L\left[0.5 \pi r^2-r^2 \arcsin \frac{h}{r}-h\left(r^2-h^2\right)^{\frac{1}{2}}\right]$$在$[0,r]$上的近似零点，并计算水的深度$r-h$.最终我们得到了如图\ref{E}的结果.
	\begin{figure}[H]
		\centering
		\includegraphics[width=0.8\textwidth]{pictures/AnswerE.png}
		\caption{AnswerE}
		\label{E}
	\end{figure}
	题目要求水的深度误差小于0.01ft，即迭代得到的值与零点$h$的误差小于0.01ft.我们在\texttt{print}函数中对其进行了判断，详见\texttt{ProblemE.cpp}.
	
	\section{ProblemF}
	本题的(a)(b)要求用A题的牛顿法寻找函数
	$$
		f(\alpha)=A \sin \alpha \cos \alpha+B \sin ^2 \alpha-C \cos \alpha-E \sin \alpha
		$$
	的零点，其中
		$$
		\begin{gathered}
			A=l \sin \beta_1, B=l \cos \beta_1, \\
			C=(h+0.5 D) \sin \beta_1-0.5 D \tan \beta_1, \\
			E=(h+0.5 D) \cos \beta_1-0.5 D .
		\end{gathered}
		$$
	所得到的结果如图\ref{F_ab}所示.
	\begin{figure}[H]
		\centering
		\includegraphics[width=0.8\textwidth]{pictures/AnswerF(a)(b).png}
		\caption{AnswerF(a)(b)}
		\label{F_ab}
	\end{figure}
	由于此函数的连续可微性，牛顿法确实起到了很好的效果.在(a)题中，我们选取一个离33较近的点（如35）作为初始值，最终看到其结果收敛到32.9722，就显示着$\alpha\approx 33^{\circ}$.在(b)题中，以33作为初始值，结果收敛到33.1689，说明$\alpha\approx 33.1689^{\circ}$.

	本题的(c)要求用A题的割线法寻找函数$f(\alpha)$的零点.我们选取了4组不同形式的初始值，得到了如图\ref{F_c}的结果.
	\begin{figure}[H]
		\centering
		\includegraphics[width=0.8\textwidth]{pictures/AnswerF(c).png}
		\caption{AnswerF(c)}
		\label{F_c}
	\end{figure}
	为了搞清楚区别，我们可以作出此函数的图像，如图\ref{GraphF}所示.
	\begin{figure}[H]
		\centering
		\includegraphics[width=0.8\textwidth]{pictures/GraphF.png}
		\caption{$f(\alpha)$的函数图像}
		\label{GraphF}
	\end{figure}
	虽然从现实角度来说，$\alpha$（作为弧度制）的取值范围只有$[0,\frac{\pi}{2}]$，不过就此函数而言，我们不难发现它在整个$\mathbb{R}$上还有很多零点（这也依赖于其$2\pi$的周期性）.因此选取不同初始点，割线法的迭代可能会使其收敛到不同于33附近的零点.
	
	1.取$x_0=33,x_1=120$.结合图像，由于120离$f$的零点远，所以此迭代仍然收敛到33附近的零点.
	
	2.取$x_0=33,x_1=-11.5$.结合图像，由于$-11.5$离此函数的零点相较于33离函数的零点更近，所有此迭代会收敛到$-11.5$附近的零点.
	
	3.取$x_0=60,x_1=80$.结合图像，割线法的迭代会朝33靠近，并最终收敛于32.9722.
	
	4.取$x_0=100,x_1=120$.结合图像，割线法的迭代会朝150靠近，最终此迭代收敛于147.028.
	
	因此，我们在使用割线法求函数零点时，应当谨慎选取初始值，最好离所求零点进一些.
	
\end{document}
